package com.hoshiicloud.goods.mapper.spu;

import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.hoshiicloud.goods.entity.spu.ExtSpu;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.hoshiicloud.goods.vo.ExtSpuDisplayVo;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * <p>
 * 扩展SPU Mapper 接口
 * </p>
 *
 * @author zhangshuhu
 * @since 2019-06-04
 */
public interface ExtSpuMapper extends BaseMapper<ExtSpu> {

    /**
     * 获取SPU信息加上最低售价（最低售价从sku表获取，如果一个spu对应多个sku，获取最低售价）
     * @param page 分页对象
     * @param wrapper 查询参数
     * @return List<Map<String,Object>>
     */
    Page<Map<String,Object>> getSpusWithMiniPrice(Page page, @Param("ew") Wrapper<ExtSpu> wrapper);

    /**
     * 获取SPU商品详情加上类目和标签信息以及最低价（最低售价从sku表获取，如果一个spu对应多个sku，获取最低售价。
     * 类目从spu_sales_category表获取关联goods_category表，标签从ext_spu_tags表获取）
     * @param wrapper 查询条件
     * @return Map<String,Object>
     */
    List<Map<String,Object>> getSpuDetailWithOthers(@Param("ew") Wrapper<ExtSpu> wrapper);

    /**
     * 根据店铺和经营类目获取SPU信息加上最低售价（最低售价从sku表获取，如果一个spu对应多个sku，获取最低售价）
     * @param page 分页对象
     * @param wrapper 查询参数
     * @return List<Map<String,Object>>
     */
    Page<Map<String,Object>> getSpusByStoreIdAndCategoryId(Page page, @Param("ew") Wrapper<ExtSpu> wrapper);

    /**
     * 商品列表展示
     */
    List<ExtSpuDisplayVo> listExtSpuDisplays(IPage page, @Param("maps") Map<String, Object> map);

    /**
     * 根据扩展SPU主键查找同一类扩展SPU
     * @param id 扩展spu主键id
     * @return List<ExtSpu>
     */
    List<ExtSpu> getSimilarExtSpuById(@Param("id") Long id);

    /**
     * 获取最大权重值
     */
    Long getMaxWeight(Long storeId);
}
